# 想要访问，或修改数组中的元素，您可以采用索引或切片的方式
# 基本切片与高级索引
import numpy as np

# slice() 可以用来构造切片对象 start（起始索引）、stop（终止索引） 和 step（步长）
a = np.arange(10)
# 生成切片对象
s = slice(2, 9, 3)  # 从索引2开始到索引9停止，间隔时间为2
print(a[s])  # [2 5 8]

# 下面对冒号切片做简单地说明：
# 如果仅输入一个参数，则将返回与索引相对应的元素。 对于上述示例来说[3] 就会返回 3。
# 如果在其前面插入“:”如[:9]，则会返回 0-8 的所有数字（不包含9）。
# 如是 [2:] 则会返回 2-9 之间的数字。
# 如果在两个参数之间，如[2:9]，则对两个索引值之间的所有元素进行切片（不包括停止索引）。
a = np.arange(10)
b = a[3]
print(b)  # 3
print(a[2:])  # [2  3  4  5  6  7  8  9]
print(a[2:5])  # [2  3  4]

# 多维数组切片
a = np.array([[1, 2, 3], [3, 4, 5], [4, 5, 6]])
print(a)
# 从[1:]索引处开始切割
print(a[1:])  # [[3 4 5] [4 5 6]]

# 注意：切片还可以使用省略号“…”，如果在行位置使用省略号，那么返回值将包含所有行元素，
# 反之，则包含所有列元素。
# 返回数组的第二列
print(a[..., 1])  # [2 4 5]
# 返回数组的第二行
print(a[1, ...])  # [3 4 5]
# 返回第二列后的所有项
print(a[..., 1:])  # [[2 3] [4 5] [5 6]]


